/**
 * author : moontea
 * Email  : g_shinelove@163.com
 *
 * Kay, thanks, your CSS
 *
 * 如果想窗口可以拖拽，请下载以下jquery ui，并把参数设置成 true 即可
 *     jquery.ui.core.min.js
 *     jquery.ui.widget.min.js
 *     jquery.ui.mouse.min.js
 *     jquery.ui.draggable.min.js
 */

var G = {};

//10进制
G.radix = 10;

/**
 * 半透明的层
 */
G.overlay = {
    show : function()
    {
        var div = '<div id="gOverlay" style="background:none repeat scroll 0 0 #000000;position:absolute;left:0;top:0;z-index:49;"></div>';
        $('body').append(div);
        //隐藏select 避免ie下面select框不能被半透明div覆盖的bug
        $('#wrapper').find('select').hide()
        $("#gOverlay")
            .css({
                    opacity:0.3,
                    height:$("body").height()+"px",
                    width:$("body").width() + "px"
                })
            .fadeIn();
    },

    del : function()
    {
        $('#gOverlay').remove();
        $('#wrapper').find('select').show()
    }
}

/**
 * 弹出层
 */
G.popDiv = {
    config : {
        id      : 'gPopDiv',
        width   : 400,
        height  : 265,
        left    : 0,
        top     : 0,
        z_index : 10000,
        drag    : true,  //是否拖动
        overlay : true,  //是否需要遮盖层
        title   : '',    //弹出层标题
        closeBtn: true   //是否需要删除按钮
    },

    init : function(config)
    {
        if (typeof config != 'undefined') {
            this.config.id = (typeof config.id == 'undefined') ? this.config.id : config.id;
            this.config.width = (typeof config.width == 'undefined') ? this.config.width : config.width;
            this.config.height = (typeof config.height == 'undefined') ? this.config.height : config.height;
            this.config.left = (typeof config.left == 'undefined') ? this.config.left : config.left;
            this.config.top = (typeof config.top == 'undefined') ? this.config.top : config.top;
            this.config.z_index = (typeof config.z_index == 'undefined') ? this.config.z_index : config.z_index;
            this.config.drag = (typeof config.drag == 'undefined') ? this.config.drag : config.drag;
            this.config.overlay = (typeof config.overlay == 'undefined') ? this.config.overlay : config.overlay;
            this.config.title = (typeof config.title == 'undefined') ? this.config.title : config.title;
            this.config.closeBtn = (typeof config.closeBtn == 'undefined') ? this.config.closeBtn : config.closeBtn;
        }

        this._create();
        this._getPosition();
        this._drag();
        this._overlay();
        this._clickCloseBtn();
    },

    setConfig : function()
    {
        this.config = {
            id      : 'gPopDiv',
            width   : 400,
            height  : 265,
            left    : 0,
            top     : 0,
            z_index : 10000,
            drag    : true,  //是否拖动
            overlay : true,  //是否需要遮盖层
            title   : '',    //弹出层标题
            closeBtn: true   //是否需要删除按钮
        }
    },

    getConfig : function()
    {
        return this.config;
    },

    _getPosition : function()
    {
        var position = G.getWindowPosition(this.config.id);
        if(this.config.left == 0) {
            $('#' + this.config.id).css('left', position.left);
        }

        if(this.config.top == 0) {
            $('#' + this.config.id).css('top', position.top);
        } else {
            $('#' + this.config.id).css('top', (this.config.top - this.config.height) + 'px');
        }
    },

    _create : function()
    {
        //如果已经创建过一个相同id的弹出层则就不再创建了
        if ($('#' + this.config.id).length >= 1) {
            return;
        }

        var div = "<div class='popBox'></div>";
        var oDiv = $(div);
        oDiv.attr('id', this.config.id);
        oDiv.css({
            'width'  : this.config.width + 'px',
            'height' : this.config.height + 'px',
            'left'   : this.config.left + 'px',
            'top'    : this.config.top + 'px',
            'z-index': this.config.z_index
        });

        var child = '<div class="popBody"><h3>' + this.config.title;
        if (this.config.closeBtn) {
            child += '<a class="closeBtn" href="javascript:;">关闭</a>';
        }
        child += '</h3></div>';

        oDiv.append(child);

        $('body').append(oDiv);
    },

    _drag : function ()
    {
        if (this.config.drag) {
            $('#' + this.config.id).draggable({cursor : 'move'});
        }
    },

    _overlay : function()
    {
        if (this.config.overlay) {
            G.overlay.show();
        }
    },

    _clickCloseBtn : function()
    {
        var obj = $('#' + this.config.id);
        var _this = this;
        obj.find('.closeBtn').click(function() {
            obj.remove();
            G.overlay.del();

            _this.setConfig();
        });
    }
}

/**
 * 模拟alert confirm
 */
G.window = {
    config : {
        id : 'gWindow',
        width : 250,
        height : 120,
        closeBtn : false,
        clickId : '' // string | js object 注意：如果是object的话，是js的object而不是jquery的
    },

    baseConfig : {},

    _init : function(config)
    {
        this.baseConfig = this.config;

        if (typeof config == 'undefined') {
                var config = {};
                config.id = this.config.id;
                config.width = this.config.width;
                config.height = this.config.height;
                config.closeBtn = this.config.closeBtn;

        } else {
            config.id = (typeof config.id == 'undefined') ? this.config.id : config.id;
            config.width = (typeof config.width == 'undefined') ? this.config.width : config.width;
            config.height = (typeof config.height == 'undefined') ? this.config.height : config.height;
            config.left = (typeof config.left == 'undefined') ? 0 : config.left;
            config.top = (typeof config.top == 'undefined') ? 0 : config.top;

            if (typeof config.clickId != 'undefined') {
                this.config.clickId = config.clickId;
                config.clickId = null;
            }

            config.closeBtn = this.config.closeBtn;
        }

        return config;
    },

    alert : function(config, method)
    {
        var type = 'alert';
        
        var opConfig = this._init(config);

        if (1 == $('#' + opConfig.id).length) {
            return false;
        }
        //弹出框
        G.popDiv.init(opConfig);
        //获取弹出框配置
        var _config = G.popDiv.getConfig();
        _config.msg = (typeof config.msg == 'undefined') ? '确定操作吗？' : config.msg;
        //模拟创建alert弹出框的特征
        this._create(_config, type);
        this._clickOkBtn(_config, method, '', '');

        this.config = this.baseConfig;
    },

    confirm : function(config, method)
    {
        var type = 'confirm';
        
        var opConfig = G.window._init(config);

        if (1 == $('#' + opConfig.id).length) {
            return false;
        }

        var clickObj = null;
        if (typeof this.config.clickId == 'object') {
            clickObj = $(this.config.clickId);
        } else {
			clickObj = $('#' + this.config.clickId);
		}

        var _this = this;

        clickObj.click(function() {
            //弹出框
            G.popDiv.init(opConfig);
            //获取弹出框配置
            var _config = G.popDiv.getConfig();
            _config.msg = (typeof config.msg == 'undefined') ? '确定操作吗？' : config.msg;
            //获取点击的链接的href地址
            var _url = $(this).attr('href');
			if (_url)
			{
				//改变链接地址的url，抑制跳转到链接的地址
				$(this).attr('href', 'javascript:;');
			}
            
            //模拟创建confirm弹出框的特征
            _this._create(_config, type);
            _this._clickOkBtn(_config, method, clickObj, _url);
            //触发取消事件
            _this._clickCancelBtn(_config, this, _url);
        });

        this.config = this.baseConfig;
    },

    _create : function(config, type)
    {
        var btn = '<dl class="popRow"><dd style="text-align: center;">' + config.msg + '</dd></dl>' +
                '<p>' +
                '<input type="button" value="确 定" id="alertSubmit" class="submitBtn">';
        
        if (type == 'confirm') {
            btn += '<input type="button" value="取 消" id="alertCancel" class="cancelBtn">';
        }

        btn += '</p>';

        $('#' + config.id).append(btn);
    },

    //触发确定事件
    _clickOkBtn : function(config, method, obj, url)
    {
        $('#alertSubmit').click(function() {
			if (obj && url) {
				obj.attr('href', url);
			}
			
            $('#' + config.id).remove();
            if (config.overlay) {
                G.overlay.del();
            }

            G.popDiv.setConfig();

            if (method) {
                method(true);
            }
        });
    },

    //触发取消事件
    _clickCancelBtn : function(config, obj, url)
    {
        $('#alertCancel').click(function() {
            $('#' + config.id).remove();
            if (config.overlay) {
                G.overlay.del();
            }

            G.popDiv.setConfig();

            $(obj).attr('href', url);
        });
    }
}

G.getWindowPosition = function(id)
{
    //弹出层的宽度
    var width  = parseInt($('#' + id).css('width'), G.radix);
    //弹出层的高度
    var height = parseInt($('#' + id).css('height'), G.radix);

    //浏览器可见区域宽度
    var windowWidth  = parseInt($(window).width(), G.radix);
    //浏览器可见区域高度
    var windowHeight = parseInt($(window).height(), G.radix);

    var position = {};

    position.left = (windowWidth - width)/2 + 'px';
    position.top  = (windowHeight - height)/2 + 'px';

    return position;
}